package com.test.controller;

import com.test.service.DefaultConfigTestService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * 事务注解默认配置
 *1. 传播行为（Propagation）
 * 默认值：`Propagation.REQUIRED`
 * 这意味着如果当前方法已经在一个事务中运行，方法将继续在该事务中运行；如果当前没有事务，方法将启动一个新的事务。
 * ### 2. 隔离级别（Isolation）
 * 默认值：`Isolation.DEFAULT`
 * 这意味着使用底层数据库的默认隔离级别。常见的隔离级别包括READ\_UNCOMMITTED、READ\_COMMITTED、REPEATABLE\_READ和SERIALIZABLE。
 * ### 3. 只读属性（ReadOnly）
 * 默认值：`false`
 * 这意味着事务允许执行读写操作。如果设置为`true`，则事务被标记为只读，不允许修改数据库。
 * ### 4. 回滚规则（RollbackFor/NoRollbackFor）
 * 默认值：`RuntimeException`和`Error`会触发事务回滚，`CheckedException`不会触发回滚。
 */
@RestController()
@RequestMapping("defaultConfig")
public class DefaultConfigTestController {

    @Resource
    private DefaultConfigTestService defaultConfigTestService;

    @GetMapping("defaultTransactionalMethod")
    public void defaultTransactionalMethod() {
        defaultConfigTestService.defaultTransactionalMethod();
    }

    @GetMapping("checkedExceptionMethod")
    public void checkedExceptionMethod() throws Exception {
        defaultConfigTestService.checkedExceptionMethod();
    }

    @GetMapping("runtimeExceptionMethod")
    public void runtimeExceptionMethod() {
        defaultConfigTestService.runtimeExceptionMethod();
    }

}
